package cn.iocoder.yudao.module.crossborder.platform.service.platformauth;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.crossborder.platform.controller.admin.platformauth.vo.*;
import cn.iocoder.yudao.module.crossborder.platform.dal.dataobject.platformauth.PlatformAuthDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * 跨境电商平台授权信息 Service 接口
 *
 * @author 芋道源码
 */
public interface PlatformAuthService {

    /**
     * 创建跨境电商平台授权信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPlatformAuth(@Valid PlatformAuthSaveReqVO createReqVO);

    /**
     * 更新跨境电商平台授权信息
     *
     * @param updateReqVO 更新信息
     */
    void updatePlatformAuth(@Valid PlatformAuthSaveReqVO updateReqVO);

    /**
     * 删除跨境电商平台授权信息
     *
     * @param id 编号
     */
    void deletePlatformAuth(Long id);

    /**
    * 批量删除跨境电商平台授权信息
    *
    * @param ids 编号
    */
    void deletePlatformAuthListByIds(List<Long> ids);

    /**
     * 获得跨境电商平台授权信息
     *
     * @param id 编号
     * @return 跨境电商平台授权信息
     */
    PlatformAuthDO getPlatformAuth(Long id);

    /**
     * 获得跨境电商平台授权信息分页
     *
     * @param pageReqVO 分页查询
     * @return 跨境电商平台授权信息分页
     */
    PageResult<PlatformAuthDO> getPlatformAuthPage(PlatformAuthPageReqVO pageReqVO);

    /**
     * 根据店铺ID获得授权信息
     *
     * @param storeId 店铺ID
     * @return 授权信息
     */
    PlatformAuthDO getPlatformAuthByStoreId(Long storeId);

    /**
     * 更新访问令牌
     *
     * @param storeId 店铺ID
     * @param accessToken 访问令牌
     * @param refreshToken 刷新令牌
     * @param expireTime 过期时间
     */
    void updateTokens(Long storeId, String accessToken, String refreshToken, java.time.LocalDateTime expireTime);

    /**
     * 更新授权状态
     *
     * @param storeId 店铺ID
     * @param authStatus 授权状态
     */
    void updateAuthStatus(Long storeId, Integer authStatus);

    /**
     * 获取过期的授权列表
     *
     * @param expireTime 过期时间阈值
     * @return 过期授权列表
     */
    List<PlatformAuthDO> getExpiredAuthList(java.time.LocalDateTime expireTime);

}